package models

import (
	"context"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo/options"
)

// UserBasic 用户基本信息结构体
type MessageBasic struct {
	UserIdentity string `bson:"user_identity"` // 用户唯一标识符
	RoomIdentity string `bson:"room_identity"` // 房间标识
	Data         string `bson:"data"`
	CreatedAt    int64  `bson:"created_at"` // 创建时间的时间戳（通常为 Unix 时间戳）
	UpdatedAt    int64  `bson:"updated_at"` // 更新时间的时间戳（通常为 Unix 时间戳）
}

// 返回数据库相关表名
func (MessageBasic) CollectionName() string {
	return "message_basic"
}

func GetMessageListByRoomIdentity(roomIdentity string, limit, skip *int64) ([]*MessageBasic, error) {
	data := make([]*MessageBasic, 0)
	filter := bson.M{"room_identity": roomIdentity}
	cur, err := Mongo.Collection(MessageBasic{}.CollectionName()).Find(context.Background(), filter, &options.FindOptions{
		Limit: limit,
		Skip:  skip,
		Sort:  bson.D{{"created_at", -1}},
	})
	if err != nil {
		return nil, err
	}
	for cur.Next(context.Background()) {
		msg := new(MessageBasic)
		err := cur.Decode(msg)
		if err != nil {
			return nil, err
		}
		data = append(data, msg)
	}
	return data, nil
}

/*
插入数据
*/
// 插入一个数据
func InsertOneMessageBasic(mb *MessageBasic) error {
	_, err := Mongo.Collection(MessageBasic{}.CollectionName()).InsertOne(context.Background(), mb)
	return err
}

// 插入多个数据
func InsertManyMessageBasic(ub []UserBasic) error {
	var docs []interface{}
	for _, user := range ub {
		docs = append(docs, user)
	}
	_, err := Mongo.Collection(UserBasic{}.CollectionName()).InsertMany(context.Background(), docs)
	return err
}
